import { IsEmail, IsNotEmpty, IsString, IsNumber, MinLength, MaxLength, Matches, IsInt, Min, Max } from 'class-validator';
import { Type } from 'class-transformer';

export class CreateUserDto {
  @IsNotEmpty({ message: '姓名不能为空' })
  @IsString({ message: '姓名必须是字符串' })
  @MaxLength(50, { message: '姓名长度不能超过50个字符' })
  name: string;

  @IsNotEmpty({ message: '年龄不能为空' })
  @Type(() => Number)
  @IsInt({ message: '年龄必须是整数' })
  @Min(18, { message: '年龄必须大于或等于18岁' })
  @Max(120, { message: '年龄必须小于或等于120岁' })
  age: number;

  @IsNotEmpty({ message: '邮箱不能为空' })
  @IsEmail({}, { message: '邮箱格式不正确' })
  email: string;

  @IsNotEmpty({ message: '密码不能为空' })
  @MinLength(8, { message: '密码长度不能少于8个字符' })
  @Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, {
    message: '密码必须包含至少一个大写字母、一个小写字母和一个数字或特殊字符',
  })
  password: string;

  @IsString()
  @MaxLength(100)
  location?: string;
}